package de.g18.llmaa.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

import de.g18.llmaa.gui.lizenzTree.Tree_Lizenz;
import de.g18.llmaa.gui.menueBar.App_MenuBar;
import de.g18.llmaa.gui.workspace.IWorkspace_Beobachter;
import de.g18.llmaa.gui.workspace.Workspace_Crtl;
import de.g18.llmaa.gui.workspace.Workspace_Desktop;
import de.g18.llmaa.logic.properties.PropertiesAndIconLoader;

/**
 * Grudgerüst der Anwendung Diese Klasse instnaziiert die wichtiegsten Bereiche
 * der Anwendung. Den {@link Tree_Lizenz} welcher hier beim {@link IApp_Model}
 * als beobachter registriert wird.
 * 
 * Den Arbeitsbereich
 * 
 * @author Gruppe LLMAA
 * 
 */
public class App_LizenzVewaltung extends JFrame {

	/**
	 * Die Menübar.
	 */
	private App_MenuBar appMenuBar;

	/**
	 * Der Workspace ein DesktopPane
	 */
	private IWorkspace_Beobachter_Component desktopPanelLizenzView;

	/**
	 * Anzeige Panel für Den {@link Tree_Lizenz}
	 */
	private JScrollPane scrollPane_LizenzTree;

	/**
	 * Das Datengrundlage model.
	 */
//	private IApp_Model model;

	private IApp_Controler appCrtl;
	
	/**
	 * Der Tree über welchen die Navigation erfolgen kann.
	 */
	private Tree_Lizenz treeLizenz;
	/**
	 * Das Trennende Panel, auf der linken Seite wird der Tree Planziert und auf
	 * der rechten der Workspace
	 */
	private JSplitPane splitPaneWork;

	/**
	 * Konstruktor welcher das Awendungsmodel setzt und die GUI instanziiert.
	 * 
	 * @param appModel
	 *            Das Datengrundlage Model.
	 */
	public App_LizenzVewaltung(IApp_Controler appCrtl) {

		this.appCrtl = appCrtl;
		initGUI();

	}

	/**
	 * Setzen des Grundlegenden Erscheinungsbildes der GUI
	 */
	private void initGUI() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		setIconImage((PropertiesAndIconLoader.getInstance().icon_App)
				.getImage());
		setTitle("Lührssen License Management Agent Advanced");
		setSize(new Dimension(900, 700));

		setJMenuBar(getAppMenuBar());

		setLayout(new BorderLayout());
		add(getSplitPaneWork(), BorderLayout.CENTER);
	}

	/**
	 * Instanziiert das Teilende Panel
	 * 
	 * @return Das instanziierte Panel
	 */
	private JSplitPane getSplitPaneWork() {
		if (splitPaneWork == null) {
			splitPaneWork = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
			splitPaneWork.setDividerLocation(300);
			splitPaneWork.add(getScrollPane_LizenzTree());
			splitPaneWork.add(getDesktopPanelLizenzView().getComponent());
		}
		return splitPaneWork;
	}

	/**
	 * Instanziiert den {@link Tree_Lizenz} und registriert ihn beim
	 * Datengrundlagen Model {@link IApp_Model}.
	 * 
	 * @return
	 */
	private Tree_Lizenz getTreeLizenz() {
		if (treeLizenz == null) {
			treeLizenz = new Tree_Lizenz(appCrtl);

//			model.setList_ProductKey(model.getList_ProductKey());

		}
		return treeLizenz;
	}

	private App_MenuBar getAppMenuBar() {
		if (appMenuBar == null) {
			appMenuBar = new App_MenuBar(appCrtl);
		}
		return appMenuBar;
	}

	/**
	 * Instanziierung des DesktopPanes welcher den Workspace darstellt. Dieses
	 * Erzeugte Anzeige Objekt wird dann bei einem eigenen Sigelton Workspace
	 * Model registriert.
	 * 
	 * @return Das Anzuzeigende Objekt
	 */
	public IWorkspace_Beobachter_Component getDesktopPanelLizenzView() {
		if (desktopPanelLizenzView == null) {
			desktopPanelLizenzView = new Workspace_Desktop();
			Workspace_Crtl.getInstnace().getModel().registerBeobachter(
					desktopPanelLizenzView);
		}
		return desktopPanelLizenzView;
	}

	public JScrollPane getScrollPane_LizenzTree() {
		if (scrollPane_LizenzTree == null) {
			scrollPane_LizenzTree = new JScrollPane(
					JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
					JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

			scrollPane_LizenzTree.setViewportView(getTreeLizenz());
		}
		return scrollPane_LizenzTree;
	}

}
